# !/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2022/10/16 22:52
# @Author : 曹庭
# @contact: caoting0403@163.com
# @File : successViewSet.py
# @Software: PyCharm

# from logging import logger
# 支付回调接口
class SuccessViewSet(ViewSet):
    authentication_classes = ()
    permission_classes = ()

    # 支付宝同步回调给前台，在同步通知给后台处理
    def get(self, request, *args, **kwargs):
        # return Response('后台已知晓，Over！！！')

        # 不能在该接口完成订单修改操作
        # 但是可以在该接口中校验订单状态(已经收到支付宝post异步通知，订单已修改)，告诉前台
        # print(type(request.query_params))  # django.http.request.QueryDict
        # print(type(request.query_params.dict()))  # dict

        out_trade_no = request.query_params.get('out_trade_no')
        try:
            models.Order.objects.get(out_trade_no=out_trade_no, order_status=1)
            return APIResponse(result=True)
        except:
            return APIResponse(1, 'error', result=False)


    # 支付宝异步回调处理
    def post(self, request, *args, **kwargs):
        try:
            result_data = request.data.dict()
            out_trade_no = result_data.get('out_trade_no')
            signature = result_data.pop('sign')
            ###########################################################
            from libs import iPay
            result = iPay.alipay.verify(result_data, signature)
            if result and result_data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
                # 完成订单修改：订单状态、流水号、支付时间
                models.Order.objects.filter(out_trade_no=out_trade_no).update(order_status=1)
            ###########################################################
                # 完成日志记录
                logger.warning('%s订单支付成功' % out_trade_no)
                return Response('success')
            else:
                logger.error('%s订单支付失败' % out_trade_no)
        except:
            pass
        return Response('failed')
